外观
4. Docker 配置
4.1 Docker 的配置文件(文件路径)
Docker 的配置文件主要用于控制 Docker 守护进程(daemon)的行为和运行时参数。了解这些配置文件的位置和作用对于正确配置 Docker 环境至关重要。
4.1.1 主要配置文件路径
Docker 的配置文件通常位于以下位置:
bash
# Linux 系统
/etc/docker/daemon.json # 主要配置文件(JSON格式)1
2
2
4.1.2 配置文件优先级
配置优先级顺序
Docker 配置的优先级从高到低如下:
- 命令行参数(
docker run --options) daemon.json配置文件- 默认配置
4.2 daemon.json中配置说明
daemon.json 是 Docker 守护进程的主要配置文件,使用 JSON 格式。以下是关键配置项的详细说明:
4.2.1 存储
存储配置主要控制 Docker 镜像和容器的存储方式、位置和驱动。
4.2.1.1 数据根目录配置
json
{
"data-root": "/var/lib/docker",
"exec-root": "/var/run/docker"
}1
2
3
4
2
3
4
数据目录规划
- "data-root": 默认路径:
/var/lib/docker - 建议使用独立磁盘分区,避免系统盘空间不足
4.2.1.2 存储驱动选择
json
{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}1
2
3
4
2
3
4
存储驱动对比:
| 存储驱动 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| overlay2 | 生产环境推荐 | 性能好,空间利用率高 | 需要内核 4.0+ |
| devicemapper | 企业存储 | 快照功能强 | 空间浪费严重 |
| btrfs | Btrfs 文件系统 | 快照和压缩 | 文件系统限制 |
| zfs | ZFS 文件系统 | 数据完整性 | Solaris/衍生系统 |
存储驱动变更风险
更改存储驱动需要删除所有容器和镜像。生产环境请谨慎操作。
4.2.2 网络
网络配置控制 Docker 的网络行为,包括 DNS、代理和镜像加速器。
4.2.2.1 DNS 配置
json
{
"dns": ["114.114.114.114", "8.8.8.8"],
"dns-opts": ["timeout:2"],
"dns-search": ["cernet.ai"]
}1
2
3
4
5
2
3
4
5
DNS 配置要点
dns:支持多个 DNS 服务器,按顺序查询,提高解析成功率dns-opts:timeout:DNS 查询超时时间,默认 2 秒,超时后尝试下一个服务器attempts:每个服务器的最大查询次数,默认 3 次,避免单点故障ndots:域名中点号的最小数量,默认 1,影响绝对域名与相对域名的判断
dns-search:DNS 搜索域,用于自动补全不完整的域名(如将"dify"补全为"dify.cernet.ai")
4.2.2.2 镜像加速器配置
json
{
"registry-mirrors": [
"https://dockerpull.org",
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm"
]
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
镜像加速器配置
多个镜像源按顺序尝试,建议配置 2-3 个备用源。
4.2.2.3 Docker 网段配置
网段冲突问题
Docker 默认网段 172.17.0.0/16 经常与高校、企业内部 VPN 网段或其他业务网段冲突,导致容器无法正常联网或 VPN 连接异常。
修改默认网段
json
{
"default-address-pools": [
{
"base": "192.168.100.0/16",
"size": 24
}
],
"bip": "192.168.100.1/24"
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
default-address-pools:定义 Docker 网络的地址池范围bip:设置 docker0 网桥的 IP 地址和子网
创建自定义网络并指定子网
bash
# 创建自定义网络并指定子网
docker network create --driver bridge --subnet=10.10.0.0/16 --gateway=10.10.0.1 my-custom-network
# 或者使用docker-compose
networks:
my-network:
driver: bridge
ipam:
config:
- subnet: 10.10.0.0/16
gateway: 10.10.0.11
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
修改网段的影响
- 修改网段后,已创建的容器和网络可能需要重新创建
- 生产环境修改前务必做好备份和测试
- 确保新网段不与现有网络冲突
4.2.3 日志配置
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"log-level": "info"
}1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
支持的日志驱动:
json-file:默认 JSON 格式文件syslog:系统日志journald:systemd 日志fluentd:Fluentd 日志收集awslogs:AWS CloudWatch Logs
4.2.4 性能和资源配置
json
{
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5,
"default-shm-size": "64MiB",
"cpu-rt-runtime": 950000,
"cpu-rt-period": 1000000
}1
2
3
4
5
6
7
2
3
4
5
6
7
性能调优建议
max-concurrent-downloads:限制并发下载数,避免网络拥塞default-shm-size:设置容器共享内存大小
4.2.5 完整配置示例
以下是一个生产环境的完整配置示例,包含了网段避让配置以适应企业环境:
json
{
"data-root": "/data/docker",
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "5"
},
"registry-mirrors": [
"https://dockerpull.org",
"https://docker.1panel.dev",
"https://docker.fxxk.dedyn.io",
"https://docker.xn--6oq72ry9d5zx.cn",
"https://docker.zhai.cm"
],
"insecure-registries": [],
"dns": ["114.114.114.114", "8.8.8.8"],
"dns-opts": ["timeout:2", "attempts:3"],
"dns-search": ["company.local"],
"default-address-pools": [
{
"base": "10.10.0.0/16",
"size": 24
}
],
"bip": "10.10.0.1/24",
"iptables": true,
"icc": false,
"experimental": false,
"max-concurrent-downloads": 5,
"max-concurrent-uploads": 5,
"default-shm-size": "128MiB",
"userland-proxy": false,
"live-restore": true,
"oom-score-adjust": -500
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
配置生效说明
修改 daemon.json 后,需要重启 Docker 服务:
bash
sudo systemctl restart docker1
配置验证
使用以下命令验证配置是否正确加载:
bash
docker info | grep -A 10 "Server"
docker system info1
2
2